package com.svo.weitu.util;

import java.lang.Thread.UncaughtExceptionHandler;

import android.content.Context;

public class CrashException implements UncaughtExceptionHandler {

	private static CrashException crashException;
	private Thread.UncaughtExceptionHandler mDefaultHandler;
	private Throwable ex;

	public Throwable getEx() {
		return ex;
	}

	public void setEx(Throwable ex) {
		this.ex = ex;
	}

	private CrashException() {
	}

	/**
	 * 单例
	 */
	public static CrashException getInstance() {
		if (crashException == null) {
			synchronized (CrashException.class) {
				if (crashException == null) {
					crashException = new CrashException();
				}
			}
		}
		return crashException;
	}

	/**
	 * 初始化,注册Context对象, 获取系统默认的UncaughtException处理器, 设置该CrashHandler为程序的默认处理器
	 * 
	 * @param ctx
	 */
	public void init(Context context) {
		mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
		Thread.setDefaultUncaughtExceptionHandler(this);
	}

	/**
	 * 当UncaughtException发生时会转入该函数来处理
	 */
	public void uncaughtException(Thread thread, Throwable ex) {
		if (!handleException(ex) && mDefaultHandler != null) {
			// 如果用户没有处理则让系统默认的异常处理器来处理
			mDefaultHandler.uncaughtException(thread, ex);
		} else {
			android.os.Process.killProcess(android.os.Process.myPid());
			System.exit(10);
		}
	}

	/**
	 * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑
	 * 
	 * @param ex
	 * @return true:如果处理了该异常信息;否则返回false
	 */
	private boolean handleException(Throwable ex) {
		return true;
	}

}
